home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / emacs / emaxima.sty < prev    next >
Encoding:
Text File  |  2003-02-09  |  14.8 KB  |  546 lines

  1. %% Macros needed for EMaxima.
  2. %% Jay Belanger (belanger@truman.edu)
  3. %%
  4. %% Some of this was taken from Dan Dill's TeX/MMA (in modified
  5. %% form, of course), and some was taken from other sources.  Some
  6. %% I may even have written myself.
  7.  
  8. %% Here are the values that the user may wish to change.
  9. %% They can be changed here or in the main TeX file.
  10.  
  11. %% For normal cells
  12. \newif\ifmaximalines
  13. \maximalinestrue
  14. \newdimen\premaximaspace
  15. \premaximaspace = 0pt
  16. \newdimen\postmaximaspace
  17. \postmaximaspace = 1.5ex
  18.  
  19. %% For the input
  20. \font\maximainputfont = cmtt10
  21. \newdimen\maximainputbaselineskip
  22. \maximainputbaselineskip = \baselineskip %10pt
  23.  
  24. %% For the output
  25. \font\maximaoutputfont = cmtt10
  26. \newdimen\maximaoutputbaselineskip
  27. \maximaoutputbaselineskip = \baselineskip %14pt
  28.  
  29. %% For session cells
  30. \newif\ifmaximasessionlines
  31. \maximasessionlinesfalse
  32. \newdimen\premaximasessionspace
  33. \premaximasessionspace = 0pt
  34. \newdimen\postmaximasessionspace
  35. \postmaximasessionspace = 1.5ex
  36.  
  37. %% For a normal session
  38. \font\maximasessionoutputfont = cmtt10
  39. \newdimen\maximasessionbaselineskip
  40. \maximasessionbaselineskip = \baselineskip %16pt
  41.  
  42. %% For a TeX session
  43. \newdimen\maximatexsessionbaselineskip
  44. \maximatexsessionbaselineskip = \baselineskip %16pt
  45. \def\maximapromptcolor{red}
  46. \def\maximainputcolor{blue}
  47. \def\maximaoutputcolor{blue}
  48. \def\maximasessionnocolor{
  49.   \def\maximapromptcolor{black}
  50.   \def\maximainputcolor{black}
  51.   \def\maximaoutputcolor{black}
  52. }
  53.  
  54. %% Some things are handled differently when pdflatex is used.
  55.  
  56. \ifx\pdfoutput\undefined
  57.   \usepackage{color}
  58. \else
  59.   \usepackage[pdftex]{color}
  60.   \usepackage{pdfcolmk}
  61.   \color{black}
  62. \fi
  63.  
  64. %% A macro for writing Maxima in the ``proper'' font
  65.  
  66. \def\Maxima{{\sffamily\slshape Maxima\/}}
  67. \def\maximaheadersize{\tiny}
  68.  
  69. %% Let's use some local macros
  70.  
  71. \catcode`\@=11\relax
  72.  
  73. %% First of all, set up some delimiters
  74. %% The units are in terms of em and ex, so if the font size is
  75. %% changed, the units will be changed accordingly
  76.  
  77. %% To make things line up, we'll need the size of "Initial"
  78.  
  79. \font\m@ximaheaderfont=cmtt8  scaled 800
  80. \setbox0=\hbox{\m@ximaheaderfont\ Initial}
  81. \newdimen\in@tmaxima
  82. \in@tmaxima = \wd0
  83. \advance\in@tmaxima by 1em
  84.  
  85. \def\maximasm@llsk{\vskip 1ex}
  86.  
  87. \def\m@ximatop{
  88. \vskip -1ex
  89. \hbox to \hsize{\vrule depth 1ex  height .3pt width .4pt
  90.                 \vrule height .4pt depth 0pt width 1.1em 
  91.                 \lower .4ex \hbox{\maximaheadersize\ \Maxima} 
  92.                 \hrulefill 
  93.                 \vrule depth 1ex height .3pt width .4pt}
  94. \vskip 1ex}
  95.  
  96.  
  97. \def\m@ximainittop{
  98. \vskip -1ex
  99. \hbox to \hsize{\vrule depth 1ex  height .3pt width .4pt
  100.                 \vrule height .4pt depth 0pt width 1.1em 
  101.                 \lower .4ex \hbox{\maximaheadersize\ \Maxima} 
  102.                 \hrulefill
  103.                 \lower .4ex \hbox{\m@ximaheaderfont\ Initial}
  104.                 \vrule height .4pt depth 0pt width 1em 
  105.                 \vrule depth 1ex height .3pt width .4pt}
  106. \vskip 1ex}
  107.  
  108. \def\m@ximaparttop#1{
  109. \vskip -1ex
  110. \hbox to \hsize{\vrule depth 1ex  height .3pt width .4pt
  111.                 \vrule height .4pt depth 0pt width 1.1em 
  112.                 \lower .4ex \hbox{\maximaheadersize\ \Maxima} 
  113.                 \hrulefill
  114.                 \lower .4ex \hbox{\m@ximaheaderfont\ #1}
  115.                 \hrulefill
  116.                 \vrule height .4pt depth 0pt width \in@tmaxima
  117.                 \vrule depth 1ex height .3pt width .4pt}
  118. \vskip 1ex}
  119.  
  120. \def\m@ximainitparttop#1{
  121. \vskip -1ex
  122. \hbox to \hsize{\vrule depth 1ex  height .3pt width .4pt
  123.                 \vrule height .4pt depth 0pt width 1.1em 
  124.                 \lower .4ex \hbox{\maximaheadersize\ \Maxima} 
  125.                 \hrulefill
  126.                 \lower .4ex \hbox{\m@ximaheaderfont\ #1}
  127.                 \hrulefill
  128.                 \lower .4ex \hbox{\m@ximaheaderfont\ Initial}
  129.                 \vrule height .4pt depth 0pt width 1em
  130.                 \vrule depth 1ex height .3pt width .4pt}
  131. \vskip 1ex}
  132.  
  133.  
  134. \def\m@ximaoutput{
  135.         \vskip -1ex
  136.         \hbox to \hsize{\hskip 1.5em
  137.                         \vrule height .4pt depth 0pt width 3em
  138.                         \lower .4ex \hbox{\m@ximaheaderfont\ Output}
  139.                         \hrulefill
  140.                         \hskip 1.5em
  141.                         }
  142.         \vskip 1ex
  143. }
  144.  
  145. \def\m@ximatexoutput{
  146.         \vskip -1ex
  147.         \hbox to \hsize{\hskip 1.5em
  148.                         \vrule height .4pt depth 0pt width 3em
  149.                         \lower .4ex \hbox{\m@ximaheaderfont\ \TeX\ Output}
  150.                         \hrulefill
  151.                         \hskip 1.5em
  152.                         }
  153.         \vskip 1ex
  154. }
  155.  
  156. \def\m@ximabottom{
  157. \hbox to \hsize{\vrule depth 0ex height 1ex width .4pt
  158.                 \hrulefill 
  159.                 \vrule depth 0ex height 1ex width .4pt}
  160. }
  161.  
  162.  
  163. %% Next, it is necessary to have a verbatim environment for the Maxima
  164. %% input and output
  165.  
  166. %% The verbatim environment for the input is based mostly on the 
  167. %% environment from "TeX for the Impatient" and Tim Morgan's verbtim2.tex
  168.  
  169. \def\maximadeactivate{%
  170.         \catcode`\{ = 12
  171.         \catcode`\} = 12
  172.         \catcode`\$ = 12
  173.         \catcode`\& = 12
  174.         \catcode`\# = 12
  175.         \catcode`\% = 12
  176.         \catcode`\~ = 12
  177.         \catcode`\^ = 12
  178.         \catcode`\_ = 12
  179.         \catcode`\  = 12
  180. }
  181.  
  182. {\catcode`\^^M=13
  183.  {\catcode`\ =13\gdef\maximaverbatimdefs{\def^^M{\ \par}\let =\ }}
  184.  \gdef\verbatimgobble#1^^M{}}
  185.  
  186. \def\m@ximainputverbatim{
  187.         \begingroup 
  188.         \setlength{\parskip}{0pt}
  189.         \par
  190.         \maximainputfont
  191.         \maximadeactivate
  192.         \maximaverbatimdefs
  193.         \catcode`\ =13 
  194.         \catcode`\^^M=13
  195. }
  196.  
  197.  
  198. \let\endm@ximainputverbatim=\endgroup
  199.  
  200. %% The verbatim for Maxima output is taken from the TeXbook.  
  201. %% It allows more symbols, but can't be used for the input
  202. %% since the input can be ended with more than one delimiter.
  203.  
  204. \def\maximauncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials}
  205.  
  206. \chardef\active=13
  207. {\catcode`\^^M=\active %
  208.  \global\let^^M=\par} %
  209.  
  210. \def\setupm@ximaverbatim{\maximaoutputfont
  211. \obeylines \maximauncatcodespecials \obeyspaces}
  212. {\obeyspaces\global\let =\ }
  213.  
  214. \def\m@ximaoutputverbatim{\par\begingroup
  215.         \baselineskip = \maximaoutputbaselineskip
  216.         \setupm@ximaverbatim\dom@ximaverbatim}      
  217. {\catcode`\|=0 \catcode`\\=12 %
  218.  |obeylines|gdef|dom@ximaverbatim^^M#1\endmaxima{#1|endgroup|ifmaximalines|m@ximabottom|fi|par|vskip 1.5ex|par|endgroup}}
  219.  
  220. %% Now we need to set up the actual environments.
  221. %% We will need some "if"s to tell us where we are
  222.  
  223. \newif\ifm@ximainput
  224. \newif\ifm@ximaoutput
  225. \newif\ifm@ximatexoutput
  226.  
  227. \def\maximanot@k{}
  228.  
  229. %% The top delimiter depends on whether or not it is an initial cell,
  230. %% etc.
  231.  
  232. \def\beginmaxima{
  233.      \begingroup
  234.      \par  \vskip \premaximaspace \par
  235.      \baselineskip = \maximainputbaselineskip
  236.      \m@ximainputtrue
  237.      \futurelet\maximanextchar\m@xima
  238. }
  239.  
  240. \def\m@xima{
  241.      \ifx\maximanextchar [%
  242.          \let\maximanext = \m@ximainit
  243.      \else
  244.          \ifx\maximanextchar <%
  245.               \let\maximanext = \m@ximapart
  246.          \else
  247.                \let\maximanext = \m@ximastart
  248.          \fi
  249.      \fi
  250.      \maximanext
  251. }
  252.  
  253. \def\m@ximainit[#1]{
  254.      \futurelet\maximanextchar%
  255.      \m@xima@nit}
  256.  
  257. \def\m@xima@nit{
  258.      \ifx\maximanextchar <%
  259.           \let\maximanext = \m@ximainitpart
  260.      \else
  261.           \let\maximanext = \m@ximainitonly
  262.      \fi
  263.      \maximanext
  264. }
  265.  
  266. \def\m@ximainitonly{
  267.      \par
  268.      \vskip 1.5ex
  269.      \par
  270.      \ifmaximalines\m@ximainittop\fi
  271.      \maximasm@llsk
  272.      \m@ximainputverbatim
  273. }
  274.  
  275.  
  276. \def\m@ximastart{
  277.      \par
  278.      \vskip 1.5ex
  279.      \par
  280.      \ifmaximalines\m@ximatop\fi
  281.      \maximasm@llsk
  282.      \m@ximainputverbatim
  283. }
  284.  
  285. \def\m@ximapart<#1:#2>{
  286.      \par
  287.      \vskip 1.5ex
  288.      \par
  289.      \def\maximatestt@k{#2}
  290.      \ifx\maximatestt@k\maximanot@k
  291.          \def\m@ximaparttext{Definition of package #1}
  292.      \else
  293.          \def\m@ximaparttext{<#1:#2>}
  294.      \fi
  295.      \ifmaximalines\m@ximaparttop\m@ximaparttext\fi
  296.      \futurelet\maximanextchar\m@ximap@rt
  297. }
  298.  
  299. \def\m@ximap@rt{
  300.      \maximasm@llsk
  301.      \m@ximainputverbatim
  302. }
  303.  
  304. \def\m@ximainitpart<#1:#2>{
  305.      \par
  306.      \vskip 1.5ex
  307.      \par
  308.      \def\maximatestt@k{#2}
  309.      \ifx\maximatestt@k\maximanot@k
  310.          \def\m@ximaparttext{Definition of package #1}
  311.      \else
  312.          \def\m@ximaparttext{<#1:#2>}
  313.      \fi
  314.      \ifmaximalines\m@ximainitparttop\m@ximaparttext\fi
  315.      \futurelet\maximanextchar\m@ximap@rt
  316. }
  317.  
  318. %% Now to take care of the various types of output
  319.  
  320. \def\maximaoutput{
  321.      \endm@ximainputverbatim
  322.      \maximasm@llsk
  323.      \m@ximainputfalse
  324.      \m@ximaoutputtrue
  325.      \ifmaximalines\m@ximaoutput\fi
  326. %     \maximasm@llsk
  327.      \m@ximaoutputverbatim
  328. }      
  329.  
  330. \def\m@ximatexd#1\\{ \[ #1 \]\endgroup}
  331. \def\m@ximatexe#1.#2\\{\[ E#1 = #2 \]\endgroup}
  332.  
  333.  
  334. \def\maximatexoutput{
  335.      \endm@ximainputverbatim
  336.      \maximasm@llsk
  337.      \m@ximainputfalse
  338.      \m@ximatexoutputtrue
  339.      \ifmaximalines\m@ximatexoutput\fi
  340.      \maximasm@llsk
  341.      \begingroup
  342.      \def\D{\begingroup\par\m@ximatexd}
  343.      \def\E{\begingroup\par\m@ximatexe}
  344.      \def\p{\begingroup\setupm@ximasessionverbatim\dom@ximasessionpreprompt}
  345.      \maximaoutputfont
  346. }      
  347.  
  348. \def\@ndmaximatexoutput{
  349.     \endgroup
  350.     \m@ximatexoutputfalse
  351.     \par
  352. }
  353.  
  354. \def\endmaxima{
  355.     \ifm@ximainput 
  356.          \endm@ximainputverbatim
  357.          \m@ximainputfalse
  358.      \else
  359.          \ifm@ximatexoutput
  360.             \@ndmaximatexoutput
  361.           \fi
  362.       \fi
  363.       \maximasm@llsk
  364.       \ifmaximalines\m@ximabottom\fi
  365.       \par
  366.       \vskip \postmaximaspace
  367.       \par
  368.       \endgroup
  369. }
  370.  
  371. %% Now the Maxima sessions
  372.  
  373. \def\maximasessionheadersize{\tiny}
  374.  
  375.  
  376. %% First of all, set up some delimiters
  377. %% The units are in terms of em and ex, so if the font size is
  378. %% changed, the units will be changed accordingly
  379.  
  380. %% To make things line up, we'll need the size of "Initial"
  381.  
  382. \font\m@ximasessionheaderfont=cmtt8  scaled 800
  383.  
  384. \def\m@ximasessiontop{
  385. \vskip -1ex
  386. \hbox to \hsize{\vrule depth 1ex  height .3pt width .4pt
  387.                 \vrule height .4pt depth 0pt width 1.1em 
  388.                 \lower .4ex \hbox{\maximasessionheadersize\ \Maxima Session} 
  389.                 \hrulefill 
  390.                 \vrule depth 1ex height .3pt width .4pt}
  391. \vskip 1ex}
  392.  
  393. \def\m@ximasessionbottom{
  394. \hbox to \hsize{\vrule depth 0ex height 1ex width .4pt
  395.                 \hrulefill 
  396.                 \vrule depth 0ex height 1ex width .4pt}
  397. }
  398.  
  399. \def\maximanothing{}
  400.  
  401. \def\m@ximasessioninputskip{
  402.         \ifx \maximanexttok \maximasession
  403.            \let \maximanext=\maximanothing
  404.         \else
  405.            \ifx \maximanexttok \maximatexsession
  406.               \let \maximanext=\maximanothing
  407.            \else     
  408.               \ifx \maximanexttok \endmaximasession
  409.                  \let \maximanext=\maximanothing
  410.               \else
  411.                   \let \maximanext=\m@ximasessioninputskiptwo
  412.               \fi
  413.            \fi
  414.         \fi
  415.         \maximanext}
  416.  
  417. \def\m@ximasessioninputskiptwo#1{\m@ximasessioninput}
  418.  
  419. \def\m@ximasessioninput{\obeylines\futurelet\maximanexttok\m@ximasessioninputskip}
  420.  
  421. \def\setupm@ximasessionverbatim{
  422. \obeylines \maximauncatcodespecials \obeyspaces}
  423. {\obeyspaces\global\let =\ }
  424.  
  425. \def\m@ximasessionsessionverbatim{\par
  426.         \baselineskip = \maximasessionbaselineskip
  427.         \setupm@ximasessionverbatim\dom@ximasessionverbatim}      
  428. {\catcode`\|=0 \catcode`\\=12 %
  429.  |obeylines|gdef|dom@ximasessionverbatim^^M#1\endmaximasession{#1|ifmaximasessionlines|m@ximasessionbottom|fi|par|vskip 1.5ex|par|endgroup}}
  430.  
  431. %% Now we need to set up the actual environments.
  432. %% We will need some "if"s to tell us where we are
  433.  
  434. \newif\ifm@ximainsessioninput
  435. \newif\ifm@ximasessionsession
  436.  
  437. %% The top delimiter depends on whether or not it is an initial cell,
  438. %% etc.
  439.  
  440. \def\beginmaximasession{
  441.      \begingroup
  442.      \m@ximainsessioninputtrue
  443.      \m@ximasessionsessionfalse
  444. %     \m@ximatexsessionfalse
  445.      \m@ximasessioninput
  446. %     \futurelet\maximanexttok\m@ximasessioninputskip
  447. }
  448.  
  449.  
  450. %% Now to take care of the session
  451.  
  452. \def\maximasession{
  453.       \endgroup
  454.      \par  \vskip \premaximasessionspace \par
  455.      \par
  456.      \vskip 1.5ex
  457.      \par
  458.      \ifmaximasessionlines\m@ximasessiontop\fi
  459.      \begingroup
  460.      \baselineskip=\maximasessionbaselineskip
  461.      \m@ximainsessioninputfalse
  462.      \m@ximasessionsessiontrue
  463.      \maximasessionoutputfont
  464.      \m@ximasessionsessionverbatim
  465. }      
  466.  
  467. \def\setupm@ximasessionverbatim{
  468. \obeylines \maximauncatcodespecials \obeyspaces}
  469. {\obeyspaces\global\let =\ }
  470. {\catcode`\|=0 \catcode`\\=12 %
  471. |obeylines|gdef|dom@ximatexsessionverbatim#1.#2\\{|par|textcolor{|maximapromptcolor}{(C#1)}#2|par|endgroup}
  472. |obeylines|gdef|dom@ximasessionpreprompt#1\\{|par #1|par|endgroup}
  473. }
  474.  
  475. \def\m@ximasessionoutput#1.#2\\{\textcolor{\maximapromptcolor}{(D#1)} \[ #2 \]\endgroup}
  476.  
  477. \def\m@ximasessioneoutput#1.#2\\{\textcolor{\maximapromptcolor}{(E#1)} \[ #2 \]\endgroup}
  478.  
  479. \def\maximatexsession{
  480.       \endgroup
  481.       \par  \vskip \premaximasessionspace \par
  482.       \par
  483.       \vskip 1.5ex
  484.       \par
  485.       \ifmaximasessionlines\m@ximasessiontop\fi
  486.       \begingroup
  487.       \m@ximainsessioninputfalse
  488.       \m@ximasessionsessiontrue
  489.       \def\C{\begingroup\color{\maximainputcolor}
  490.         \setupm@ximasessionverbatim\dom@ximatexsessionverbatim}
  491.       \def\D{\begingroup\color{\maximaoutputcolor}\par\m@ximasessionoutput}
  492.       \def\E{\begingroup\color{\maximaoutputcolor}\par\m@ximasessioneoutput}
  493.       \def\DD{\begingroup\color{\maximaoutputcolor}\par\m@ximatexd}
  494.       \def\p{\begingroup\setupm@ximasessionverbatim\dom@ximasessionpreprompt}
  495.       \baselineskip=\maximatexsessionbaselineskip
  496.       \maximasessionoutputfont
  497. }
  498.  
  499. \def\endmaximasession{
  500.     \par
  501.     \ifm@ximainsessioninput 
  502.          \m@ximainsessioninputfalse
  503.     \else
  504.          \ifm@ximasessionsession
  505.             \ifmaximasessionlines\m@ximasessionbottom\fi
  506.             \par
  507.             \vskip \postmaximasessionspace \par
  508.             \par
  509.             \maximasm@llsk             
  510.          \fi
  511.     \fi
  512.     \color{black}
  513.     \endgroup
  514. }
  515.  
  516. %% Finally, the Maxima noshows.
  517.  
  518. \def\m@ximanoshowinputskip{
  519.               \ifx \maximanexttok \endmaximanoshow
  520.                  \let \maximanext=\maximanothing
  521.               \else
  522.                   \let \maximanext=\m@ximanoshowinputskiptwo
  523.               \fi
  524.         \maximanext}
  525.  
  526. \def\m@ximanoshowinputskiptwo#1{\m@ximanoshowinput}
  527.  
  528. \def\m@ximanoshowinput{\obeylines\futurelet\maximanexttok\m@ximanoshowinputskip}
  529.  
  530. \def\endm@ximanoshowinputskip{\endgroup}
  531.  
  532. \def\beginmaximanoshow{
  533.      \begingroup
  534.      \catcode`\%=11\relax
  535.      \m@ximanoshowinput
  536. }
  537.  
  538. \def\endmaximanoshow{
  539.     \catcode`\%=14\relax
  540.     \endgroup
  541. }
  542.  
  543. \catcode`\@=12\relax
  544.  
  545. \endinput
  546.